#include <stdio.h> // printf 方法定义
#include <string.h> // strcpy 方法定义
/* int main() {
    printf("hello world by c \n");
    return 0;
}
 */
// if

int flag;

int week = 7;
int main() {
    /* if(flag) 
    {
        printf("flag is true \n");
    }
    else
    {
        printf("flag is false \n");
    }

    switch (week)
    {
        case 1:
            printf("周一 \n");
            break;
        
        default:
            printf("周八 \n");
            break;
    } */

    /*  for (int i = 0; i < week; i++)
    {
        printf("周 %d\n",i + 1);
    }
     */

   /*  char str[] = "123456789";
    char *p = str;
    char *p2 = str;
    while (*p != '\0')
    {
        printf("%c",*p++);
    }

    printf("\n");
    do
    {
        printf("%c", *p2);
        *p2++;
    } while (*p2 != '\0'); */

    /*数组的定义方式*/
   /*  char arr1[5]={'h','e','1','1','o'};
    char arr2[5] = "hello";
    char arr3[] = "hello"; // 字符串的结束符 有一个\0
    char arr4[5]={[0]= 'h',[1]='1'};

    printf("arr1 %d\n", sizeof(arr1));
    printf("arr2 %d\n", sizeof(arr2));
    printf("arr3 %d\n", sizeof(arr3));
    printf("arr4 %d\n", sizeof(arr4));

    printf("%#x\n",arr1);
    printf("%#x\n",arr2); */

    /* 指针变量就是存放变量的地址 */
   /*  int a = 10;

    int *p = &a; 
    printf("指针变量 *p 是 %d\n", *p);

    char str = 'c';

    char *pc = &str;

    *pc = 'a';
    printf("指针变量 *pc 是 %d\n", *pc); */

    /*  结构体 */
    struct Student
    {   
        char name[30]; // 姓名
        int age; // 年龄 
        int sex; // 性别  
        float score; // 成绩 
    };
    
    struct Student s1 = {
        .name   =   "张三",
        .age    =   18,
        .sex    =   1
    };
    struct Student s2 = {"李四", 18, 0};
    struct Student s3;
    strcpy(s3.name, "王五");
    s3.age = 16;
    s3.sex = 0;

    printf("结构体1 名字=%-9s 年龄=%d 性别%s \n", s1.name, s1.age, s1.sex == 0? "男": "女");
    printf("结构体2 名字=%-9s 年龄=%d 性别%s \n", s2.name, s2.age, s2.sex == 0? "男": "女");
    printf("结构体3 名字=%-9s 年龄=%d 性别%s \n", s3.name, s3.age, s3.sex == 0? "男": "女");
    /**
     *联合体
     * 联合体也叫共用体, 联合体的大小等于其内部最大成员的大小
     * 联合体类型的成员是共用同一段内存的，所以它们之间不能有 overlapping 的区域。成员的类型可以是任意类型，但是大小必须相同
     */
    union Data {
        char ch; // 1个字节
        int num; // 4个字节
    };
    union Data d1;
    d1.ch = 1;
    d1.num = 2;

    printf("d1.ch %d d1.num %d\n", d1.ch, d1.num); // 这里d1.ch 输出的是2 是因为 

    return 0;
}

